指定したTitleからアクセス可能なMovie PlayListに関する情報を取得するためのサンプルコード。なお、本サンプルではautostartFirstPlayListFlagの値も取得している。
アクセス可能なMovie PlayListの範囲は、指定されたTitleに対応するBD-J Object file中のtableOfAccessiblePlayListsにあるaccessToAllFlagの値に依存し、具体的には次の関係にある。
- trueの場合:全Movie PlayList
- falseの場合:tableOfAccessiblePlayLists中のplayListFileNamesにリストされているMovie PlayList
なお、HDMV Titleを指定した場合は以下のようになる。
- Movie PlayList:0個
- autostartFirstPlayListFlag:false
Main.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.tv.service.SIManager;
import javax.tv.service.Service;
import javax.tv.service.navigation.ServiceFilter;
import javax.tv.service.navigation.ServiceList;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.bluray.ti.PlayList;
import org.bluray.ti.Title;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
public class Main implements Xlet {
int x=100, y=100;
Graphics g = null;
public void initXlet(XletContext xc){
try {
Font font = new Font(null, java.awt.Font.BOLD, 48);
HScene hs= HSceneFactory.getInstance().getFullScreenScene(
HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
hs.setFont(font);
hs.setVisible(true);
g = hs.getGraphics();
g.setColor(Color.white);
// Titleリストを取得
SIManager sim = SIManager.createInstance();
ServiceList sl = sim.filterServices(new ServiceFilter(){
public boolean accept(Service arg0) {return true;}
});
for( int j = 0; j < sl.size(); j++ ){
Title t = (Title)sl.getService(j);
g.drawString(t.getName(),x,y); y+=50;
// Autostart PlayListの有無を取得
g.drawString("hasAutoPlayList: "+t.hasAutoPlayList(), x, y); y+=50;
PlayList[] pls = t.getPlayLists(); // PlayListリストを取得
for( int i = 0; i < pls.length; i++ ){
String fn = pls[i].getFileName(); // PlayListファイル名取得
g.drawString("PlayList["+i+"]"+fn, x, y); y+=50;
}
}
} catch (Throwable thr){
}
}
public void startXlet(){ }
public void pauseXlet(){ }
public void destroyXlet(boolean unconditional){}
}